fn main() {
    // 1、如果返回引用至于第一个参数有关，那么第二个参数可以不写生命周期标识符
    // 2、从函数返回一个引用，返回类型的生命周期参数必须与其中一个参数的生命周期匹配
    // 3、如果无法确定：需要使用生命周期参数约束
    // 这里指定y的生命周期至少要和x的一样长
    fn short<'a, 'b: 'a>(x: &'a str, y: &'b str) -> &'a str {
        if (x.len() <= y.len()) {
            return x;
        } else {
            return y;
        }
    }
    println!("{}", short("2333", "998"))
    // 如果函数返回的引用不执行某个参数，那么它必须指向了函数运行时创建的值，必然导致悬垂引用
}
